# 封装:把数据和操作数据的方法捆绑在一起，同时对外部隐藏对象的内部实现细节
# 继承:一个子类可以继承另一个父类的属性和方法
# 多态:不同的对象可以对同一消息做出不同的响应

# 定义一个父类 Animal
class Animal:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        return self._name

    def speak(self):
        # 父类的 speak 方法，具体实现由子类完成
        pass


# 定义一个子类 Dog，继承自 Animal
class Dog(Animal):
    def speak(self):
        # 重写父类的 speak 方法
        return f"{self.get_name()} says Woof!"


# 定义一个子类 Cat，继承自 Animal
class Cat(Animal):
    def speak(self):
        # 重写父类的 speak 方法
        return f"{self.get_name()} says Meow!"


# 定义一个函数，接收一个 Animal 对象作为参数
def animal_speak(animal):
    print(animal.speak())


# 创建 Dog 和 Cat 的实例
dog = Dog("Buddy")
cat = Cat("Whiskers")

# 调用 animal_speak 函数，展示多态性
animal_speak(dog)
animal_speak(cat)




class A:
	# def __str__(self):
	# 	return "A"
	pass

# 父类
print(A.__bases__)

class A1:
	def __str__(self):
		return "A1"

class AA(A, A1):
	# def __str__(self):
	# 	return "AA"

	pass
print(AA.__bases__)

class B:
	pass

class BB(B):
	def __str__(self):
		return "BB"

class C(AA, BB):
	# def __str__(self):
	# 	return "C"

	pass

print(C.__bases__)

c = C()
print(c)

# python3 广度优先
# 方法 检索 顺序 mro
print(C.mro())

